package club.xyes.zkh.ecommerce.dao.mapper;

import club.xyes.zkh.ecommerce.commons.dto.ConsumptionOverview;
import club.xyes.zkh.ecommerce.commons.entity.TransactionLog;
import club.xyes.zkh.ecommerce.commons.vo.TransactionLogOverview;
import club.xyes.zkh.ecommerce.dao.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Create by 郭文梁 2019/4/19 0019 18:12
 * TransactionLogMapper
 * 交易记录相关数据库访问对象
 *
 * @author 郭文梁
 * @data 2019/4/19 0019
 */
@Repository
public interface TransactionLogMapper extends BaseMapper<TransactionLog> {
    /**
     * 通过用户ID和商铺ID查询概览信息
     *
     * @param userId 用户ID
     * @param shopId 商铺ID
     * @return 概览信息
     */
    ConsumptionOverview overviewByUserAndShop(@Param("userId") Integer userId,
                                              @Param("shopId") Integer shopId);

    /**
     * 通过用户ID查询交易记录
     *
     * @param userId 用户ID
     * @return TransactionLog
     */
    List<TransactionLog> selectByUserIdFetchAll(Integer userId);

    /**
     * 商铺交易概览
     *
     * @param shopId 商铺ID
     * @param start  开始时间
     * @param end    结束时间
     * @return （amount）
     */
    Map<String, Object> overviewByShopId(@Param("shopId") Integer shopId,
                                         @Param("start") Date start,
                                         @Param("end") Date end);

    /**
     * 个女警ShopId查询交易记录
     *
     * @param shopId ShopId
     * @return 交易记录
     */
    List<TransactionLog> selectByShopId(@Param("shopId") Integer shopId);

    /**
     * 个女警shopId统计交易数量和交易用户数量
     *
     * @param shopId ShopId
     * @return (t_count, u_count)
     */
    Map<String, Object> selectTransactionCountAndUserCount(@Param("shopId") Integer shopId);

    /**
     * 根据商铺ID和消费金额查询消费记录
     *
     * @param shopId 商铺ID
     * @param amount 金额
     * @return TransactionLog List
     */
    List<TransactionLog> selectByShopIdAndAmount(@Param("shopId") Integer shopId,
                                                 @Param("amount") Integer amount);

    /**
     * 通过用户和商铺查询概览信息
     *
     * @param shopId 商铺ID
     * @param userId 用户ID
     * @return 概览信息
     */
    TransactionLogOverview overviewByShopAndUser(@Param("shopId") Integer shopId,
                                                 @Param("userId") Integer userId);
}
